
Cypress.on('uncaught:exception', (err, runnable) => {
    // returning false here prevents Cypress from
    // failing the test
    if(err.message.includes('Redirect')){
        return false
    }
})
const fillSubTask = (x, y, name, time, price, description, minRam, maxRam) => {
    cy.get('canvas').click(x, y);
    cy.get('[data-testid="subtask-name"]').type(name);
    cy.get('[data-testid="subtask-type"]').click().get('[data-testid="subtask-type-func"]').click();
    cy.get('[data-testid="subtask-time"] input').type(`${time}\n`);
    cy.get('[data-testid="subtask-price"]').type(price);
    cy.get('[data-testid="subtask-description"]').type(description);
    cy.get('[data-testid="requirement-os"]').click({multiple: true});
    cy.get('[data-testid="requirement-min-ram"] input').type(minRam, {force: true});
    cy.get('[data-testid="requirement-max-ram"] input').type(maxRam, {force: true});
    cy.get('[data-testid="requirement-processor"]').click({multiple: true});
    cy.get('body').click(1, 1);
}

const completeProcess = (name, psw, process) => {
        it('Login', () => {
            cy.visit('http://localhost:8080');
            cy.get('[data-testid="username"]').type(name);
            cy.get('[data-testid="password"]').type(psw);
            cy.contains(/^登录$/).click();
            cy.wait(5000)
        });

        process();

        it('Login out', () => {
            cy.contains(/^个人中心$/).click();
            cy.contains(/^退出登录$/).click();
            cy.contains(/^\s*确定\s*$/).click();
            cy.wait(5000)
        })
}


describe('Test create collaboration task', () => {


    const taskName = `测试任务${Math.floor(Math.random() * 10000000) * 1000000}`;
    //const taskName = `测试任务4585140000000`;


    completeProcess('boss', '123456iloveSE', () => {
        it('create collaboration task', () => {
            cy.viewport(1400, 660)
            cy.contains(/^发布任务$/).click();
            cy.contains(/^\s*多用户协作任务\s*$/).click();
            cy.get('[data-testid="task-name"]').type(taskName);
            cy.get('[data-testid="task-description"]').type(taskName);
            cy.get('[data-testid="task-number"] input').clear().type('3');
            cy.get('[data-testid="task-description-file"] input').selectFile('cypress/fixtures/lalala.png', {
                force: true
            });
            cy.get('[data-testid="task-app-file"] input').selectFile('cypress/fixtures/lalala.png', { force: true });

            // 绘制任务关系图
            cy.get('[data-testid="add-node"]').click();
            cy.get('canvas').click(100, 100).click(300, 100).click(500, 100);
            cy.get('[data-testid="add-node"]').click();
            cy.get('[data-testid="add-edge"]').click();
            cy.get('canvas').click(100, 100).click(300, 100).click(300, 100).click(500, 100);
            cy.get('[data-testid="add-edge"]').click();

            // 填充每个子任务信息
            fillSubTask(100, 100, '子任务1', '2023-10-29 19:57:40\n', '1', '子任务1描述', '16', '32');
            fillSubTask(300, 100, '子任务2', '2023-11-29 19:57:40\n', '1', '子任务2描述', '16', '32')
            fillSubTask(500, 100, '子任务3', '2023-12-29 19:57:40\n', '1', '子任务3描述', '16', '32')

            cy.contains(/^\s*发布任务\s*$/).click();
            cy.contains(/^\s*确定\s*$/).click();
        });
    })

    completeProcess('worker', '123456iloveSE', () => {
        it('complete collaboration task', () => {
            cy.contains(/收起仪表盘/).click();
            cy.contains(/^\s*所有任务\s*$/).click();
            cy.contains(taskName).parent().nextAll().last().click();
            cy.wait(5000)
            cy.get('[data-testid="task-map"] canvas').click(40, 285);
            cy.wait(1000)
            cy.contains(/^\s*领取子任务\s*$/).click();

            cy.contains(/^\s*我的任务\s*$/).click();
            cy.contains(/^\s*执行中任务\s*$/).click();
            cy.contains(taskName).parent().nextAll().last().click();

            cy.contains(/^\s*提交报告\s*$/).click();

            cy.get('[data-testid="report-environment"]').click();
            cy.get('[data-testid="ios12"]').click();
            cy.get('[data-testid="report-description"]').type('子任务描述');
            cy.get('[data-testid="report-steps"]').type('复现步骤');
            cy.get('[data-testid="report-image"] input').selectFile('cypress/fixtures/lalala.png', {
                force: true
            });
            cy.contains(/^\s*提交\s*$/).click();
            cy.contains(/^\s*确定\s*$/).click();

        });
    })
    completeProcess('worker2', '123456iloveSE', () => {
        it('complete collaboration task', () => {
            cy.contains(/收起仪表盘/).click();
            cy.contains(/^\s*所有任务\s*$/).click();
            cy.contains(taskName).parent().nextAll().last().click();
            cy.wait(5000)
            cy.get('[data-testid="task-map"] canvas').click(280, 285);
            cy.wait(1000)
            cy.contains(/^\s*领取子任务\s*$/).click();
        });
    })
    completeProcess('worker3', '123456iloveSE', () => {
        it('complete collaboration task', () => {
            cy.contains(/收起仪表盘/).click();
            cy.contains(/^\s*所有任务\s*$/).click();
            cy.contains(taskName).parent().nextAll().last().click();
            cy.wait(5000)
            cy.get('[data-testid="task-map"] canvas').click(540, 285);
            cy.wait(1000)
            cy.contains(/^\s*领取子任务\s*$/).click();

            cy.contains(/^\s*我的任务\s*$/).click();
            cy.contains(/^\s*执行中任务\s*$/).click();
            cy.contains(taskName).parent().nextAll().last().click();

        });
    })

    completeProcess('worker2', '123456iloveSE', () => {
        it('complete collaboration task', () => {
            cy.contains(/收起仪表盘/).click();
            cy.contains(/^\s*我的任务\s*$/).click();
            cy.contains(/^\s*执行中任务\s*$/).click();
            cy.contains(taskName).parent().nextAll().last().click();

            cy.contains(/^\s*提交报告\s*$/).click();

            cy.get('[data-testid="report-environment"]').click();
            cy.get('[data-testid="ios12"]').click();
            cy.get('[data-testid="report-description"]').type('子任务描述');
            cy.get('[data-testid="report-steps"]').type('复现步骤');
            cy.get('[data-testid="report-image"] input').selectFile('cypress/fixtures/lalala.png', {
                force: true
            });
            cy.contains(/^\s*提交\s*$/).click();
            cy.contains(/^\s*确定\s*$/).click();

        });
    })

    completeProcess('worker3', '123456iloveSE', () => {
        it('complete collaboration task', () => {
            cy.contains(/收起仪表盘/).click();
            cy.get('[data-testid="message-drawer"]').click()
            cy.contains(taskName).click();
            cy.contains(/^\s*去看看\s*$/).click();
            cy.get('body').click(1, 2)
/*
            cy.contains(/^\s*我的任务\s*$/).click();
            cy.contains(/^\s*执行中任务\s*$/).click();
            cy.contains(taskName).parent().nextAll().last().click();
*/

            cy.contains(/^\s*提交报告\s*$/).click();

            cy.get('[data-testid="report-environment"]').click();
            cy.get('[data-testid="ios12"]').click();
            cy.get('[data-testid="report-description"]').type('子任务描述');
            cy.get('[data-testid="report-steps"]').type('复现步骤');
            cy.get('[data-testid="report-image"] input').selectFile('cypress/fixtures/lalala.png', {
                force: true
            });
            cy.contains(/^\s*提交\s*$/).click();
            cy.contains(/^\s*确定\s*$/).click();

        });
    })
    completeProcess('boss', '123456iloveSE', () => {
        it('check collaboration task', () => {
            cy.contains(/^\s*我的发布\s*$/).click();
            cy.contains(/^\s*执行中任务\s*$/).click();
            cy.contains(taskName).parent().nextAll().last().click();
            cy.contains(/^\s*查看所有报告\s*$/).click();
            cy.contains(/^\s*第2组\s*$/).click();
            cy.get('[data-testid="task-map"] canvas').click(50, 50);

        });
    })








})
